package com.gjx.leetcode;
//67. 二进制求和
//
//给定两个二进制字符串，返回他们的和（用二进制表示）。
//
//输入为非空字符串且只包含数字 1 和 0。
//
//示例 1:
//
//输入: a = "11", b = "1"
//输出: "100"
//示例 2:
//
//输入: a = "1010", b = "1011"
//输出: "10101"



public class Solution067 {
	public String addBinary(String a, String b) {
        if (a == null || a.length() == 0 || a.equals("0")) {
        	return b;
        }
        if (b == null || b.length() == 0 || b.equals("0")) {
        	return a;
        }
        
        StringBuilder sb = new StringBuilder();
        
        int i=0;
        
        int carry = 0;
        
        while (i < Math.max(a.length(), b.length())) {
        	
        	int va = 0;
        	int vb = 0;
        	
        	if (i < a.length()){
        		va = a.charAt(a.length()-i-1) - '0';
        	}
        	if (i < b.length()) {
        		vb = b.charAt(b.length()-i-1) - '0';
        	}
        	
        	int v = va + vb + carry;
        	sb.append(v % 2);
        	carry = v / 2;
        	
        	i++;
        }
        
        if (carry != 0) {
        	sb.append(carry);
        }
        
        return sb.reverse().toString();
    }
}
